package cloud.seri.iot.common.api

import cloud.seri.iot.common.model.*
import com.aliyuncs.iot.model.v20180120.*


interface ThingModelManager
{

    /**
     * 设置设备的属性
     *
     * @param IotId      要查询的设备ID
     * @param ProductKey 设备所隶属的产品Key
     * @param DeviceName 设备名称
     * @param Items  要设置的属性信息，组成为key:value，数据格式为 JSON String。  必须
     *
     * @Des 描述：
     */
    fun setDeviceProperty(dto: SetDevicePropertyDTO): SetDevicePropertyResponse?

    /**
     * 批量设置设备属性
     *
     * @param ProductKey      设置属性的设备所隶属的产品Key
     * @param DeviceNames     要设置属性的设备名称列表。目前，最多支持500个设备
     * @param Items  要设置的属性信息，组成为key:value，数据格式为 JSON String。  必须
     *
     * @Des 描述：
     */
    fun setDevicesProperty(dto: SetDevicesPropertyDTO): SetDevicesPropertyResponse?

    /**
     * 在一个设备上执行指定的服务（调用设备服务）
     *
     * @param IotId      要查询的设备ID
     * @param ProductKey 设备所隶属的产品Key
     * @param DeviceName 设备的名称
     * @param Identifier 高级版设备的服务Identifier  必须
     * @param Args       要启用服务的入参信息    必须
     * @Des 描述：
     */
    fun invokeThingService(dto: InvokeThingServiceDTO): InvokeThingServiceResponse?


    /**
     * 批量调用设备服务
     *
     * @param IotId      要查询的设备ID  必须
     * @param ProductKey 设备所隶属的产品Key  必须
     * @param DeviceNames 设备的名称列表。最多支持500个设备  必须
     * @param Identifier  高级版设备的服务Identifier  必须
     * @param Args 要启用服务的入参信息  必须
     *
     * @Des 描述：
     */
    fun invokeThingsService(dto: InvokeThingsServiceDTO): InvokeThingsServiceResponse?

    /**
     * 查询指定设备的属性快照
     *
     * @param IotId      要查询的设备ID  必须
     * @param ProductKey 设备所隶属的产品Key  必须
     * @param DeviceName 设备的名称列表。最多支持500个设备  必须
     *
     * @Des 描述：
     */
    fun queryDevicePropertyStatus(dto: DeviceDTO): QueryDevicePropertyStatusResponse?


    /**
     * 查询指定设备的事件记录
     *
     * @param IotId      要查询的设备ID
     * @param ProductKey 设备所隶属的产品Key
     * @param DeviceName 设备的名称
     * @param EventType  事件类型  info：信息。alert：告警 。 error：故障。
     * @param Identifier 事件标识符   必须
     * @param StartTime  要查询的事件记录的开始时间    必须
     * @param EndTime    要查询的事件记录的结束时间    必须
     * @param PageSize   返回结果中每页显示的记录数
     * @param Asc        排序方式
     *
     * @Des 描述：
     */
    fun queryDeviceEventData(dto: QueryDeviceEventDataDTO): QueryDeviceEventDataResponse?


    /**
     * 查询指定设备的属性记录
     *
     * @param IotId      要查询的设备ID
     * @param ProductKey 设备所隶属的产品Key
     * @param DeviceName 设备的名称
     * @param Identifier 事件标识符   必须
     * @param StartTime  要查询的事件记录的开始时间    必须
     * @param EndTime    要查询的事件记录的结束时间    必须
     * @param PageSize   返回结果中每页显示的记录数
     * @param Asc        排序方式
     *
     * @Des 描述：
     */
    fun queryDevicePropertyData(dto: InvokeThingsServiceDTO): QueryDevicePropertyDataResponse?

    /**
     * 查询指定设备的服务记录
     *
     * @param IotId      要查询的设备ID
     * @param ProductKey 设备所隶属的产品Key
     * @param DeviceName 设备的名称
     * @param Identifier 事件标识符   必须
     * @param StartTime  要查询的事件记录的开始时间    必须
     * @param EndTime    要查询的事件记录的结束时间    必须
     * @param PageSize   返回结果中每页显示的记录数
     * @param Asc        排序方式
     *
     * @Des 描述：
     */
    fun queryDeviceServiceData(dto: QueryDeviceServiceDataDTO): QueryDeviceServiceDataResponse?


    /**
     * 查询指定设备的属性上报数据
     *
     * @param IotId      要查询的设备ID
     * @param ProductKey 设备所隶属的产品Key
     * @param DeviceName 设备的名称
     * @param StartTime  要查询的事件记录的开始时间    必须
     * @param EndTime    要查询的事件记录的结束时间    必须
     * @param PageSize   返回结果中每页显示的记录数
     * @param Asc        排序方式
     *
     * @Des 描述：
     */
    fun queryDevicePropertiesData(dto: QueryDevicePropertiesDataDTO): QueryDevicePropertiesDataResponse?
}
